package com.searchcloud.service.impl;

import com.searchcloud.been.Menu;
import com.searchcloud.service.WeiXinService;
import com.searchcloud.utils.ServerUrlUtils;
import com.searchcloud.utils.message.MessageUtil;
import com.searchcloud.utils.message.resp.TextMessage;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
import java.util.Map;

/**
 *@author:ike
 *@function:
 *@creatTime:17:49 2017/10/25
 **/
@Service
public class WeiXinServiceImpl implements WeiXinService{

    public void createWeiXinMenu() {
        System.out.println("开始创建菜单");
        String menu_data=Menu.creatMenuData();
        System.out.println("菜单数据:"+menu_data);
        try {
            URL menu_url=new URL(ServerUrlUtils.CREATE_MENU_URL);
            HttpURLConnection conn = (HttpURLConnection) menu_url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type","text/xml; charset=UTF-8");//用于指导实体数据的内容类型
            conn.setRequestProperty("Content-Length",String.valueOf(menu_data.length()));
            OutputStream outStream=conn.getOutputStream();
            outStream.write(menu_data.getBytes("utf-8"));
            conn.connect();
            byte[] buffer=new byte[1024];
            int length;
            ByteArrayOutputStream bos=new ByteArrayOutputStream();
            if (conn.getResponseCode()==HttpURLConnection.HTTP_OK){
                InputStream is = conn.getInputStream();
                while ((length=(is.read(buffer)))!=-1){
                    bos.write(buffer,0,length);
                }
                conn.disconnect();
                is.close();
                bos.close();
                System.out.println(new String( bos.toByteArray()));
            }

        }  catch (IOException e) {
            e.printStackTrace();
        }
    }
    public String processWeiXinMsg(HttpServletRequest request) {
        System.out.println("收到消息进行处理");
        // xml格式的消息数据
        String respXml = null;
        // 默认返回的文本消息内容
        String respContent = "未知的消息类型！";
        try {
            // 调用parseXml方法解析请求消息
            Map<String, String> requestMap = MessageUtil.parseXml(request);
            // 发送方帐号
            String fromUserName = requestMap.get("FromUserName");
            // 开发者微信号
            String toUserName = requestMap.get("ToUserName");
            // 消息类型
            String msgType = requestMap.get("MsgType");

            // 回复文本消息
            TextMessage textMessage = new TextMessage();
            textMessage.setToUserName(fromUserName);
            textMessage.setFromUserName(toUserName);
            textMessage.setCreateTime(new Date().getTime());
            textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);

            // 文本消息
            if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
                respContent = "您发送的是文本消息！";
            }
            // 图片消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
                respContent = "您发送的是图片消息！";
            }
            // 语音消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {
                respContent = "您发送的是语音消息！";
            }
            // 视频消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)) {
                respContent = "您发送的是视频消息！";
            }
            // 地理位置消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
                respContent = "您发送的是地理位置消息！";
            }
            // 链接消息
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
                respContent = "您发送的是链接消息！";
            }
            // 事件推送
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
                // 事件类型
                String eventType = requestMap.get("Event");
                // 关注
                if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
                    respContent = "谢谢您的关注！";
                }
                // 取消关注
                else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
                    // TODO 取消订阅后用户不会再收到公众账号发送的消息，因此不需要回复
                }
                // 扫描带参数二维码
                else if (eventType.equals(MessageUtil.EVENT_TYPE_SCAN)) {
                    // TODO 处理扫描带参数二维码事件
                }
                // 上报地理位置
                else if (eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)) {
                    // TODO 处理上报地理位置事件
                }
                // 自定义菜单
                else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
                    // TODO 处理菜单点击事件
                    String event_key=requestMap.get("EventKey");
                   if (Menu.MY_SUBSCRIBE.equals(event_key)){
                       respContent="您还未有订阅信息";
                   }else if (Menu.SEARCH.equals(event_key)){
                       respContent="请说关键词";
                   }else if (Menu.WATCH_MOVIE.equals(event_key)){
                       respContent="正在为你生成视频推荐信息";
                   }
                    System.out.println("收到消息进行处理111");

                }
            }
            // 设置文本消息的内容
            textMessage.setContent(respContent);
            // 将文本消息对象转换成xml
            respXml = MessageUtil.messageToXml(textMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return respXml;
    }
}
